/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2024-05-09     IBM       the first version
 */
#ifndef APPLICATIONS_HARDWARE_INC_TM1638_H_
#define APPLICATIONS_HARDWARE_INC_TM1638_H_

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include <stdio.h>
#include "driver/gpio.h"
#include <string.h>

/**====================================================###### 宏定义 ######==================================================*/
#define SET           1               //
#define RESET           0               //

#define TM1638_STB           GPIO_NUM_18               //
#define TM1638_CLK           GPIO_NUM_19               //
#define TM1638_DIO           GPIO_NUM_21               //


#define DATA_CMD_ADDR           0x40               // 写数据、地址自增、普通模式
#define REG_FIRST_ADDR          0xc0               // 寄存器首地址
#define LED_DISPLAY_ADDR        0x8F               // 显示开、亮度8级
#define LED_CLOSE_ADDR          0x80               // 显示关、亮度0级

#define TM1638_STB_HIGH         gpio_set_level(TM1638_STB, SET);      // 片选引脚拉高
#define TM1638_STB_LOW          gpio_set_level(TM1638_STB, RESET);    // 片选引脚拉低
#define TM1638_CLK_HIGH         gpio_set_level(TM1638_CLK, SET);      // 时钟引脚拉高
#define TM1638_CLK_LOW          gpio_set_level(TM1638_CLK, RESET);    // 时钟引脚拉低
#define TM1638_DIO_HIGH         gpio_set_level(TM1638_DIO, SET);      // 数据引脚拉高
#define TM1638_DIO_LOW          gpio_set_level(TM1638_DIO, RESET);    // 数据引脚拉低

#define TM1638_GET_DIO          gpio_get_level(TM1638_DIO)    // 读取数据引脚


#define Power_Key       0x0200      // 电源开关
#define Start_Key       0x4000      // 开始暂停
#define Heat_Add_Key    0x0002      // 温度加键
#define Heat_Sub_Key    0x0100      // 温度减键
#define Str_Add_Key     0x0400      // 强度加键
#define Str_Sub_Key     0x0020      // 强度减键
#define Time_Add_Key    0x0040      // 时间加键
#define Time_Sub_Key    0x0010      // 时间减键
#define Mode_Add_Key    0x0004      // 模式加键
#define Mode_Sub_Key    0x0001      // 模式减键


//#define TM1638_DIO_IN              gpio_set_direction(TM1638_DIO, GPIO_MODE_INPUT_OUTPUT);    // 
//#define TM1638_DIO_OUT              gpio_set_direction(TM1638_DIO, GPIO_MODE_OUTPUT);    // 

/**====================================================#######  END  #######=================================================*/

/**=================================================##### 函数及变量声明 #####===============================================*/
extern void TM1638_Init(void);                                                  // TM1638初始化设置
//extern void LED_Display_Value1(uint16_t pwr, uint16_t pt, uint16_t it);          // LED数码管显示
extern void TM1638_Task(void* param);                                                    // 测试demo程序
/**====================================================#######  END  #######=================================================*/

#endif /* APPLICATIONS_HARDWARE_INC_TM1638_H_ */

